ggg = "gggii"


def simple_fn(name, style="color:red"):  # 位置参数 第一个
    pass


def tag(
    name,  # 位置参数 第一个
    style="color:red",  # 位置参数第二个
    *content,  # 剩下的位置参数
    cls="btn",  # 第一个 kw参数
    **attrs,
):
    # print(ggg)
    if style:
        sty = f'style="{style}"'
    else:
        sty = ""
    if cls:
        attrs["class"] = cls

    if attrs:
        attr = " ".join(f'{attr}="{value}"' for attr, value in attrs.items())
    else:
        attr = ""
    if content:
        return "\n".join(f"<{name} {sty} {attr}>{c}</{name}>" for c in content)
    else:
        return f"<{name} {sty} {attr}/>"


secrets = "fuck ccpit"


def meta(tag):
    print(ggg)
    print("__name__", tag.__name__)
    print("__code__", tag.__code__)
    print(
        "\n----".ljust(6).join(
            ["codes 展开"] + [x for x in dir(tag.__code__) if not x.startswith("__")]
        ),
    )
    print("__code__.co_varnames", tag.__code__.co_varnames)
    print("__qualname__", tag.__qualname__)
    print("__globals__", [x for x in tag.__globals__ if not x.startswith("__")])
    print("__defaults__", tag.__defaults__)
    print("__kwdefaults__", tag.__kwdefaults__)
    print("__annotations__", tag.__annotations__)
    print("__closure__", tag.__closure__)


meta(simple_fn)
meta(tag)
print("----------------------------------------------------------------")


def test():
    """
    >>> test()
    <br style="color:red" class="btn"/>
    <p style="he" class="btn">h</p>
    <div style="bgc:red" onclick="(e)=>{e.preventEvent()}" class="btn-primary"/>
    位置参数和其命名参数 不得同时出现
    位置参数和其命名参数 不得同时出现
    """
    print(tag("br"))
    print(tag("p", "he", "h"))
    print(
        tag(
            cls="btn-primary",
            style="bgc:red",
            name="div",
            onclick="(e)=>{e.preventEvent()}",
        )
    )
    # 错误 FIXME name 重复
    try:
        print(
            tag(
                "html",
                cls="btn-primary",
                style="bgc:red",
                name="div",
                onclick="(e)=>{e.preventEvent()}",
            )
        )
    except:
        print("位置参数和其命名参数 不得同时出现")
        pass
    # 错误 FIXME name,style 重复
    try:
        print(
            tag(
                "html",
                "checked:false",
                cls="btn-primary",
                style="bgc:red",
                name="div",
                onclick="(e)=>{e.preventEvent()}",
            )
        )
    except:
        print("位置参数和其命名参数 不得同时出现")
        pass


if __name__ == "__main__":
    import doctest

    print("fn_args_meta 测试开始")
    (ff, tt) = doctest.testmod()
    print("测试结束:统计-失败{},总计{}".format(ff, tt))
    print("√" * tt if tt > 0 and not ff else "无测试" if not ff else "×" * ff)
